package medium;//我们把只包含质因子 2、3 和 5 的数称作丑数（Ugly Number）。求按从小到大的顺序的第 n 个丑数。
//
//
//
// 示例:
//
// 输入: n = 10
//输出: 12
//解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
//
// 说明:
//
//
// 1 是丑数。
// n 不超过1690。
//
//
// 注意：本题与主站 264 题相同：https://leetcode-cn.com/problems/ugly-number-ii/
// Related Topics 哈希表 数学 动态规划 堆（优先队列）
// 👍 205 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
public class O49 {

    public static void main(String[] args) {
        System.out.println(nthUglyNumber(11));
    }

    public static int nthUglyNumber(int n) {
        //根据丑数*[2,3,5]必是丑数
        //时间和空间复杂度O(n)
        if (n == 1) return 1;
        int[] nums = new int[3];
        int count = 1;
        int[] res = new int[n];
        res[0] = 1;
        while (count < n) {
            res[count] = Math.min(2 * res[nums[0]], Math.min(3 * res[nums[1]], 5 * res[nums[2]]));
            if (res[count] % 2 == 0) {
                nums[0]++;
            }
            if (res[count] % 3 == 0) {
                nums[1]++;
            }
            if (res[count] % 5 == 0) {
                nums[2]++;
            }
            count++;
        }
        return res[count - 1];
    }
}
//leetcode submit region end(Prohibit modification and deletion)
